﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Linq;
using System.IO;

namespace AlocaProfeV2.Dao
{
    public class CoordenadorDao
    {
        String xml_path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xml/coordenador.xml");

        public void cadastraCoordenador(Modelos.Coordenador coordenador)
        {
            XDocument xmlcoordenador = XDocument.Load(xml_path);

            //Descobrindo o ultimo id e definindo o id a ser criado
            Int32 ultimo_id = Convert.ToInt32(xmlcoordenador.Descendants("Coordenadores").Elements("Coordenador").Last().Attribute("id").Value);
            ultimo_id += 1;

            xmlcoordenador.Element("Coordenadores").Add(
                new XElement("Coordenador",
                    new XAttribute("id", ultimo_id), //TODO : Auto incremento,
                     new XElement("Nome", coordenador.Nome),
                    new XElement("Email", coordenador.Email),
                    new XElement("Senha", coordenador.Senha),
                    new XElement("Ativo", 1)
                ));

            xmlcoordenador.Save(xml_path);
        }

        //Login de coordenador
        public Modelos.Coordenador loginCoordenador(String email, String senha)
        {
            XDocument xmlcoordenador = XDocument.Load(xml_path);
            Modelos.Coordenador coordenador = new Modelos.Coordenador();
            var data = from item in xmlcoordenador.Descendants("Coordenador")
                       select new
                       {
                           id = item.Attribute("id").Value,
                           nome = item.Element("Nome").Value,
                           email = item.Element("Email").Value,
                           senha = item.Element("Senha").Value,
                           ativo = item.Element("Ativo").Value
                       };

            foreach (var coord in data)
            {
                if (email == coord.email && senha == coord.senha && Convert.ToInt32(coord.ativo) == 1)
                {
                    coordenador.Id = Convert.ToInt32(coord.id);
                    coordenador.Nome = coord.nome;
                }
            }
            return coordenador;
        }

        public List<Modelos.Coordenador> listaCoordenador()
        {
            Boolean atividade;
            XDocument xmlcoordenador = XDocument.Load(xml_path);
            List<Modelos.Coordenador> coordenadores = new List<Modelos.Coordenador>();
            var data = from item in xmlcoordenador.Descendants("Coordenador")
                       select new
                       {
                           nome = item.Element("Nome").Value,
                           email= item.Element("Email").Value,
                           ativo = item.Element("Ativo").Value
                       };

            foreach (var coord in data)
            {
                if (coord.ativo == "1")
                {
                    atividade = true;
                }
                else
                {
                    atividade = false;
                }
                if (coord.nome != "" && coord.nome != null)
                {
                    Modelos.Coordenador objCoordenador = new Modelos.Coordenador(coord.nome, coord.email, atividade);
                    coordenadores.Add(objCoordenador);
                }
            }
                return coordenadores;
        }

        public void atulizaCoordenadores(List<Modelos.Coordenador> lista)
        {
            try
            {
                XElement xml = XElement.Load(xml_path, LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);

                IEnumerable<XElement> elements = xml.Elements();

                foreach (Modelos.Coordenador coordenador in lista)
                {
                    foreach (var items in elements.Elements("Nome").Where(e => e.Value == coordenador.Nome))
                    {
                        if (coordenador.Ativo==true)
                        {
                            items.Parent.Element("Ativo").Value = "1";
                        }
                        else
                        {
                            items.Parent.Element("Ativo").Value = "0";
                        }

                    }
                }
                //Salva Alterações
                xml.Save(xml_path);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}